package br.com.fiap.vendas.web.controller;

import java.util.List;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import br.com.fiap.vendas.business.delegate.ProdutoDelegate;
import br.com.fiap.vendas.business.exception.ServiceException;
import br.com.fiap.vendas.business.vo.ProdutoVO;

@Controller
@RequestMapping("/produto")
public class ProdutoController {
    private Logger log = Logger.getLogger(ProdutoController.class);
    private ProdutoDelegate delegate;

    public ProdutoController() {
        if (delegate == null) {
            delegate = new ProdutoDelegate();
        }
    }

    // Quando abrir url direto pelo browser redireciona para a tela de cadastro.
    @RequestMapping(method = RequestMethod.GET, value = "/inserirProduto.do")
    public String iniciarCadastro(Model request) {
        try {
            log.info("iniciando busca de produtos.");
            buscarProdutos(request);
        } catch (ServiceException e) {
            request.addAttribute("mensagem", "Erro:" + e.getMessage());
        }
        return "inserirProduto";
    }

    private List<ProdutoVO> buscarProdutos(Model request)
            throws ServiceException {
        List<ProdutoVO> produtos = delegate.listarProdutos();
        log.info("produtos encontrados[." + produtos.size() + "].");
        request.addAttribute("produtoVOList", produtos);
        return produtos;
    }

    @RequestMapping(method = RequestMethod.POST, value = "/inserirProduto.do")
    public String inserirUsuario(@ModelAttribute ProdutoVO produtoVO,
                                 Model request) {
        try {
            log.info("inserindo produto:" + produtoVO.toString());
            delegate.inserirProduto(produtoVO);
            buscarProdutos(request);
        } catch (ServiceException e) {
            request.addAttribute("mensagem",
                    "Ocorreu um erro ao cadastrar o usuario");
        }
        request.addAttribute("mensagem", "Usuario cadastrado com sucesso.");
        return "inserirProduto";
    }

}
